
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class ScorePipeline {

    // 定义一个接口，表示流水线的每个步骤
    interface PipelineStep<T> {
        T process(T input);
    }

    // 第一步：录入分数
    static PipelineStep<List<Double>> inputScores = scores -> {
        // 这里可以添加录入分数的逻辑，为了示例，我们假设分数已经录入
        return scores;
    };

    // 第二步：去掉一个最高分和一个最低分
    static PipelineStep<List<Double>> removeExtremes = scores -> {
        if (scores.size() > 2) {
            Collections.sort(scores);
            scores.remove(0); // 去掉最低分
            scores.remove(scores.size() - 1); // 去掉最高分
        }
        return scores;
    };

    // 第三步：计算平均成绩
    static PipelineStep<List<Double>> calculateAverage = scores -> {
        double sum = 0;
        for (double score : scores) {
            sum += score;
        }
        double average = scores.isEmpty() ? 0 : sum / scores.size();
        List<Double> result = new ArrayList<>();
        result.add(average); // 将平均分放入列表中，以便后续步骤处理
        return result;
    };

    // 流水线处理方法
    public static double processScores(List<Double> scores) {
        List<Double> processedScores = inputScores.process(scores);
        processedScores = removeExtremes.process(processedScores);
        List<Double> averageScore = calculateAverage.process(processedScores);
        return averageScore.get(0); // 返回平均分
    }

    public static void main(String[] args) {
        // 假设这是录入的分数
        List<Double> scores = new ArrayList<>();
        scores.add(9.5);
        scores.add(9.7);
        scores.add(9.6);
        scores.add(9.8);
        scores.add(9.9);
        scores.add(9.4);

        // 将任务交给流水线处理
        double averageScore = processScores(scores);

        // 输出平均成绩
        System.out.println("选手的平均成绩是: " + averageScore);
    }
}
